import { IPSAppDEField } from '../../app/dataentity/ipsapp-defield';
import { IPSCodeList } from '../../codelist/ipscode-list';
import { IPSControlContainer } from '../ipscontrol-container';
import { IPSControlNavigatable } from '../ipscontrol-navigatable';
import { IPSMDAjaxControl } from '../ipsmdajax-control';
import { IPSMDControl2 } from '../ipsmdcontrol2';
import { IPSDEDataViewDataItem } from './ipsdedata-view-data-item';
import { IPSDEDataViewItem } from './ipsdedata-view-item';
import { IPSLayoutPanel } from '../panel/ipslayout-panel';
import { IPSLanguageRes } from '../../res/ipslanguage-res';
import { IPSSysCss } from '../../res/ipssys-css';
import { IPSSysPFPlugin } from '../../res/ipssys-pfplugin';
import { IPSUIActionGroup } from '../../view/ipsuiaction-group';

/**
 *
 * 子接口类型识别属性[]
 * 继承父接口类型值[DATAVIEW]
 * @export
 * @interface IPSDEDataView
 */
export interface IPSDEDataView extends IPSMDAjaxControl, IPSControlContainer, IPSControlNavigatable, IPSMDControl2 {
  /**
   * 卡片栅格布局大型列宽
   * @type {number}
   * @default -1
   */
  cardColLG: number;

  /**
   * 卡片栅格布局中型列宽
   * @type {number}
   * @default -1
   */
  cardColMD: number;

  /**
   * 卡片栅格布局小型列宽
   * @type {number}
   * @default -1
   */
  cardColSM: number;

  /**
   * 卡片栅格布局超小列宽
   * @type {number}
   * @default -1
   */
  cardColXS: number;

  /**
   * 卡片高度
   * @type {number}
   * @default 0
   */
  cardHeight: number;

  /**
   * 卡片宽度
   * @type {number}
   * @default 0
   */
  cardWidth: number;

  /**
   * 无值显示内容
   * @type {string}
   */
  emptyText: string;

  /**
   * 无值内容语言资源
   *
   * @type {IPSLanguageRes}
   */
  getEmptyTextPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 无值内容语言资源
   *
   * @type {IPSLanguageRes}
   */
  get emptyTextPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 无值内容语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getEmptyTextPSLanguageResMust(): IPSLanguageRes;

  /**
   * 分组栅格布局大型列宽
   * @type {number}
   * @default -1
   */
  groupColLG: number;

  /**
   * 分组栅格布局中型列宽
   * @type {number}
   * @default -1
   */
  groupColMD: number;

  /**
   * 分组栅格布局小型列宽
   * @type {number}
   * @default -1
   */
  groupColSM: number;

  /**
   * 分组栅格布局超小列宽
   * @type {number}
   * @default -1
   */
  groupColXS: number;

  /**
   * 分组高度
   * @type {number}
   * @default 0
   */
  groupHeight: number;

  /**
   * 分组布局
   * @description 值模式 [多数据部件分组方向] {ROW：从左往右、 COLUMN：从上往下 }
   * @type {( string | 'ROW' | 'COLUMN')}
   */
  groupLayout: string | 'ROW' | 'COLUMN';

  /**
   * 分组模式
   * @description 值模式 [多数据部件分组模式] {NONE：无分组、 AUTO：自动分组、 CODELIST：分组代码表 }
   * @type {( string | 'NONE' | 'AUTO' | 'CODELIST')}
   */
  groupMode: string | 'NONE' | 'AUTO' | 'CODELIST';

  /**
   * 分组应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getGroupPSAppDEField(): IPSAppDEField | null;

  /**
   * 分组应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get groupPSAppDEField(): IPSAppDEField | null;

  /**
   * 分组应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getGroupPSAppDEFieldMust(): IPSAppDEField;

  /**
   * 分组代码表
   *
   * @type {IPSCodeList}
   */
  getGroupPSCodeList(): IPSCodeList | null;

  /**
   * 分组代码表
   *
   * @type {IPSCodeList}
   */
  get groupPSCodeList(): IPSCodeList | null;

  /**
   * 分组代码表（必须存在）
   *
   * @type {IPSCodeList}
   */
  getGroupPSCodeListMust(): IPSCodeList;

  /**
   * 分组默认界面样式
   *
   * @type {IPSSysCss}
   */
  getGroupPSSysCss(): IPSSysCss | null;

  /**
   * 分组默认界面样式
   *
   * @type {IPSSysCss}
   */
  get groupPSSysCss(): IPSSysCss | null;

  /**
   * 分组默认界面样式（必须存在）
   *
   * @type {IPSSysCss}
   */
  getGroupPSSysCssMust(): IPSSysCss;

  /**
   * 分组绘制插件
   *
   * @type {IPSSysPFPlugin}
   */
  getGroupPSSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 分组绘制插件
   *
   * @type {IPSSysPFPlugin}
   */
  get groupPSSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 分组绘制插件（必须存在）
   *
   * @type {IPSSysPFPlugin}
   */
  getGroupPSSysPFPluginMust(): IPSSysPFPlugin;

  /**
   * 分组界面行为组
   *
   * @type {IPSUIActionGroup}
   */
  getGroupPSUIActionGroup(): IPSUIActionGroup | null;

  /**
   * 分组界面行为组
   *
   * @type {IPSUIActionGroup}
   */
  get groupPSUIActionGroup(): IPSUIActionGroup | null;

  /**
   * 分组界面行为组（必须存在）
   *
   * @type {IPSUIActionGroup}
   */
  getGroupPSUIActionGroupMust(): IPSUIActionGroup;

  /**
   * 分组宽度
   * @type {number}
   * @default 0
   */
  groupWidth: number;

  /**
   * 项布局面板
   *
   * @type {IPSLayoutPanel}
   */
  getItemPSLayoutPanel(): IPSLayoutPanel | null;

  /**
   * 项布局面板
   *
   * @type {IPSLayoutPanel}
   */
  get itemPSLayoutPanel(): IPSLayoutPanel | null;

  /**
   * 项布局面板（必须存在）
   *
   * @type {IPSLayoutPanel}
   */
  getItemPSLayoutPanelMust(): IPSLayoutPanel;

  /**
   * 项默认界面样式
   *
   * @type {IPSSysCss}
   */
  getItemPSSysCss(): IPSSysCss | null;

  /**
   * 项默认界面样式
   *
   * @type {IPSSysCss}
   */
  get itemPSSysCss(): IPSSysCss | null;

  /**
   * 项默认界面样式（必须存在）
   *
   * @type {IPSSysCss}
   */
  getItemPSSysCssMust(): IPSSysCss;

  /**
   * 项绘制插件
   *
   * @type {IPSSysPFPlugin}
   */
  getItemPSSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 项绘制插件
   *
   * @type {IPSSysPFPlugin}
   */
  get itemPSSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 项绘制插件（必须存在）
   *
   * @type {IPSSysPFPlugin}
   */
  getItemPSSysPFPluginMust(): IPSSysPFPlugin;

  /**
   * 默认排序方向
   * @description 值模式 [字段排序方向] {ASC：升序、 DESC：降序 }
   * @type {( string | 'ASC' | 'DESC')}
   */
  minorSortDir: string | 'ASC' | 'DESC';

  /**
   * 默认排序应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getMinorSortPSAppDEField(): IPSAppDEField | null;

  /**
   * 默认排序应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get minorSortPSAppDEField(): IPSAppDEField | null;

  /**
   * 默认排序应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getMinorSortPSAppDEFieldMust(): IPSAppDEField;

  /**
   * 排序值应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getOrderValuePSAppDEField(): IPSAppDEField | null;

  /**
   * 排序值应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get orderValuePSAppDEField(): IPSAppDEField | null;

  /**
   * 排序值应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getOrderValuePSAppDEFieldMust(): IPSAppDEField;

  /**
   * 数据项集合
   *
   * @type {IPSDEDataViewDataItem[]}
   */
  getPSDEDataViewDataItems(): IPSDEDataViewDataItem[] | null;

  /**
   * 数据项集合
   *
   * @type {IPSDEDataViewDataItem[]}
   */
  get psDEDataViewDataItems(): IPSDEDataViewDataItem[] | null;

  findPSDEDataViewDataItem(objKey: any): IPSDEDataViewDataItem | null;

  /**
   * 卡片视图项集合
   *
   * @type {IPSDEDataViewItem[]}
   */
  getPSDEDataViewItems(): IPSDEDataViewItem[] | null;

  /**
   * 卡片视图项集合
   *
   * @type {IPSDEDataViewItem[]}
   */
  get psDEDataViewItems(): IPSDEDataViewItem[] | null;

  findPSDEDataViewItem(objKey: any): IPSDEDataViewItem | null;

  /**
   * 分页大小
   * @type {number}
   */
  pagingSize: number;

  /**
   * 附加实体默认数据项
   * @type {boolean}
   */
  appendDEItems: boolean;

  /**
   * 支持卡片编辑
   * @type {boolean}
   */
  enableCardEdit: boolean;

  /**
   * 支持卡片分组调整
   * @type {boolean}
   */
  enableCardEditGroup: boolean;

  /**
   * 支持卡片次序调整
   * @type {boolean}
   */
  enableCardEditOrder: boolean;

  /**
   * 支持卡片新建
   * @type {boolean}
   */
  enableCardNew: boolean;

  /**
   * 启用分组
   * @type {boolean}
   */
  enableGroup: boolean;

  /**
   * 支持分页栏
   * @type {boolean}
   */
  enablePagingBar: boolean;

  /**
   * 默认禁用排序
   * @type {boolean}
   */
  noSort: boolean;

  /**
   * 单项选择
   * @type {boolean}
   */
  singleSelect: boolean;
}
